// events => 在nodejs中可以自定义事件 (定义事件 删除事件 触发事件)

var events = require("events");
// console.log(events);

var { EventEmitter } = events; //触发器构造函数 

var e = new EventEmitter(); // 创建一个事件触发器(用于绑定事件 删除事件 触发事件 的对象 )

// 绑定定义事件  => 通过emit触发
// e.on(eventType,callcack)     对应事件类型绑定事件
// e.addListener(eventType,callcack)  对应事件类型绑定事件
// e.once(eventType,callcack)   对应事件类型绑定一次事件 
// e.prependListener(eventType,callcack)   对应事件类型绑定事件(将事件监听器添加到监听器数组的开)
// on方法与addListener方法没有区别

// 清除自定义事件
// e.off(eventType,callcack)    对应事件类型 清除绑定的事件(对应回调函数)
// e.removeListener(eventType,callcack)  对应事件类型 清除绑定的事件(对应回调函数)
// off方法与removeListener方法没有区别
// e.removeAllListeners(eventType)  对应事件类型,清除所有绑定事件


// e.addListener("one", function (data) { // data事件触发时传递的数据
//     console.log(1, data);
// })

// e.on("one", function (data) { // data事件触发时传递的数据
//     console.log(2, data);
// })

// e.once("one", function (data) { // 绑定的事件只会触发一次
//     console.log(3, data);
// })

// e.prependListener("one", function (data) { // 绑定的事件只会触发一次
//     console.log(4, data);
// })

function oneHandler_1(data) { // data事件触发时传递的数据
    console.log(1, data)
}
function oneHandler_2(data) { // data事件触发时传递的数据
    console.log(2, data);
}
function oneHandler_3(data) { // data事件触发时传递的数据
    console.log(3, data);
}
function oneHandler_4(data) { // data事件触发时传递的数据
    console.log(4, data);
}

e.on("one", oneHandler_1);
e.addListener("one", oneHandler_2);
e.once("one", oneHandler_3);
e.prependListener("one", oneHandler_4);

e.on("two", function (data) {
    console.log(data);
})


// 清除事件
// 单删 => 对应回调函数
// e.off("one", oneHandler_1);
// e.removeListener("one", oneHandler_2);
// e.removeListener("one", oneHandler_3);
// e.removeListener("one", oneHandler_4);

// 多删 => 对应事件类型清除
// e.removeAllListeners("one");

// 触发事件
// e.emit("one", "hello one");
// e.emit("one", "hello one more");
// e.emit("two", "hello two");
// listenerCount(eventName) 查看绑定事件的个数 eventName为事件名
// eventNames()  返回一个列出触发器已注册监听器的事件的数组。 数组中的值为字符串或符号

// console.log(e.listenerCount("one"));
// console.log(e.eventNames());

// .getMaxListeners()  返回 EventEmitter 当前的最大监听器限制值
// 默认情况下, 一个监听事件名 最多可绑定十个事件函数, 如需改变则需要借用.setMaxListener方法

// .setMaxListeners(num)  设置单个事件监听绑定函数的数量  默认为10 num为需要修改的上限值,最好一开始就设置.

// console.log(e.getMaxListeners());  // 默认情况下 一个类型最多只能绑定十个相同类型的事件

// e.setMaxListeners(20)
// console.log(e.getMaxListeners());

